home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectShow_WinXP / VMR / TxtPlayer / vcdplyer.h < prev   
Encoding:
C/C++ Source or Header  |  2001-10-08  |  6.2 KB  |  176 lines

  1. //------------------------------------------------------------------------------
  2. // File: vcdplyer.h
  3. //
  4. // Desc: DirectShow sample code - header file for TxtPlayer sample
  5. //
  6. // Copyright (c) 1994 - 2001, Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9. #include <ddraw.h>
  10.  
  11. #define D3D_OVERLOADS
  12. #include <d3d.h>
  13. #include "BltAlpha.h"
  14.  
  15. /* -------------------------------------------------------------------------
  16. ** CMpegMovie - an Mpeg movie playback class.
  17. ** -------------------------------------------------------------------------
  18. */
  19. enum EMpegMovieMode { MOVIE_NOTOPENED = 0x00,
  20.                       MOVIE_OPENED    = 0x01,
  21.                       MOVIE_PLAYING   = 0x02,
  22.                       MOVIE_STOPPED   = 0x03,
  23.                       MOVIE_PAUSED    = 0x04 };
  24.  
  25. #define GRID_CY 24
  26. #define GRID_CX 40
  27.  
  28. struct IMpegAudioDecoder;
  29. struct IMpegVideoDecoder;
  30. struct IQualProp;
  31.  
  32. typedef struct {
  33.     BITMAPINFOHEADER    bmiHeader;
  34.     union {
  35.         RGBQUAD         bmiColors[iPALETTE_COLORS];
  36.         DWORD           dwBitMasks[iMASK_COLORS];
  37.         TRUECOLORINFO   TrueColorInfo;
  38.     };
  39. } AMDISPLAYINFO;
  40.  
  41. #define NUM_CUBE_VERTICES (4*6)
  42.  
  43. BOOL VerifyVMR(void);
  44.  
  45.  
  46. class CMpegMovie :
  47.     public CUnknown,
  48.     public IVMRSurfaceAllocator,
  49.     public IVMRImagePresenter
  50. {
  51. private:
  52.     // Our state variable - records whether we are opened, playing etc.
  53.     EMpegMovieMode   m_Mode;
  54.     HANDLE           m_MediaEvent;
  55.     HWND             m_hwndApp;
  56.     GUID             m_TimeFormat;
  57.  
  58.     RECT            m_rcSrc;
  59.     RECT            m_rcDst;
  60.     SIZE            m_VideoSize;
  61.     SIZE            m_VideoAR;
  62.  
  63.     HRESULT Initialize3DEnvironment(HWND hwndApp);
  64.     HRESULT InitDeviceObjects(LPDIRECT3DDEVICE7 pd3dDevice);
  65.     HRESULT FrameMove(LPDIRECT3DDEVICE7 pd3dDevice,FLOAT fTimeKey);
  66.     HRESULT Render(LPDIRECT3DDEVICE7 pd3dDevice, LPDIRECTDRAWSURFACE7 pDDSBlend, BYTE alpha);
  67.     HRESULT RenderAppImage(LPDIRECT3DDEVICE7 pd3dDevice, LPDIRECTDRAWSURFACE7 pDDSBlend, BYTE alpha);
  68.     HRESULT AllocateSurfaceWorker(DWORD dwFlags,
  69.                                   LPBITMAPINFOHEADER lpHdr,
  70.                                   LPDDPIXELFORMAT lpPixFmt,
  71.                                   LPSIZE lpAspectRatio,
  72.                                   DWORD dwMinBackBuffers,
  73.                                   DWORD dwMaxBackBuffers,
  74.                                   DWORD* lpdwBackBuffer,
  75.                                   LPDIRECTDRAWSURFACE7* lplpSurface);
  76.     HRESULT DDARGB32SurfaceInit(
  77.         LPDIRECTDRAWSURFACE7* lplpDDS,
  78.         BOOL bTexture, DWORD cx, DWORD cy);
  79.  
  80.  
  81.     HRESULT CreateFontCache(int cyFont);
  82.     CCritSec                    m_AppImageLock;
  83.     HFONT                       m_hFont;
  84.     int                         m_cxFont;
  85.     int                         m_cyFont;
  86.     int                         m_cxFontImg;
  87.     int                         m_cyFontImg;
  88.     LPDIRECTDRAWSURFACE7        m_lpDDSFontCache;
  89.  
  90.     HMONITOR                    m_hMonitor;
  91.     LPDIRECTDRAW7               m_lpDDObj;
  92.     CAlphaBlt*                  m_lpBltAlpha;
  93.  
  94.     LPDIRECTDRAWSURFACE7        m_lpPriSurf;
  95.     LPDIRECTDRAWSURFACE7        m_lpBackBuffer;
  96.     LPDIRECTDRAWSURFACE7        m_lpDDTexture;
  97.     LPDIRECTDRAWSURFACE7        m_lpDDAppImage;
  98.     D3DVERTEX                   m_pCubeVertices[NUM_CUBE_VERTICES];
  99.     DDCAPS                      m_ddHWCaps;
  100.     AMDISPLAYINFO               m_DispInfo;
  101.     BOOL                        m_bRndLess;
  102.  
  103.     IFilterGraph                *m_Fg;
  104.     IGraphBuilder               *m_Gb;
  105.     IMediaControl               *m_Mc;
  106.     IMediaSeeking               *m_Ms;
  107.     IMediaEvent                 *m_Me;
  108.     IVMRSurfaceAllocatorNotify  *m_SAN;
  109.     IVMRWindowlessControl       *m_Wc;
  110.  
  111.     HRESULT AddVideoMixingRendererToFG();
  112.     void GetPerformanceInterfaces();
  113.     HRESULT FindInterfaceFromFilterGraph(
  114.         REFIID iid, // interface to look for
  115.         LPVOID *lp  // place to return interface pointer in
  116.         );
  117.  
  118. public:
  119.      CMpegMovie(HWND hwndApplication);
  120.     ~CMpegMovie();
  121.  
  122.     DECLARE_IUNKNOWN
  123.     STDMETHODIMP NonDelegatingQueryInterface(REFIID, void**);
  124.  
  125.     // IVMRSurfaceAllocator
  126.     STDMETHODIMP AllocateSurface(DWORD_PTR w,
  127.                                  VMRALLOCATIONINFO *lpAllocInfo,
  128.                                  DWORD* lpdwActualBackBuffers,
  129.                                  LPDIRECTDRAWSURFACE7* lplpSurface);
  130.     STDMETHODIMP FreeSurface(DWORD_PTR w);
  131.     STDMETHODIMP PrepareSurface(DWORD_PTR w, LPDIRECTDRAWSURFACE7 lplpSurface,
  132.                                 DWORD dwSurfaceFlags);
  133.     STDMETHODIMP AdviseNotify(IVMRSurfaceAllocatorNotify* lpIVMRSurfAllocNotify);
  134.  
  135.  
  136.     // IVMRImagePresenter
  137.     STDMETHODIMP StartPresenting(DWORD_PTR w);
  138.     STDMETHODIMP StopPresenting(DWORD_PTR w);
  139.     STDMETHODIMP PresentImage(DWORD_PTR w, VMRPRESENTATIONINFO* p);
  140.  
  141.     HRESULT         OpenMovie(TCHAR *lpFileName);
  142.     DWORD           CloseMovie();
  143.     BOOL            PlayMovie();
  144.     BOOL            PauseMovie();
  145.     BOOL            StopMovie();
  146.     OAFilterState   GetStateMovie();
  147.     HANDLE          GetMovieEventHandle();
  148.     long            GetMovieEventCode();
  149.     BOOL            PutMoviePosition(LONG x, LONG y, LONG cx, LONG cy);
  150.     BOOL            GetMoviePosition(LONG *x, LONG *y, LONG *cx, LONG *cy);
  151.     BOOL            GetNativeMovieSize(LONG *cx, LONG *cy);
  152.     BOOL            CanMovieFrameStep();
  153.     BOOL            FrameStepMovie();
  154.     REFTIME         GetDuration();
  155.     REFTIME         GetCurrentPosition();
  156.     BOOL            SeekToPosition(REFTIME rt,BOOL bFlushData);
  157.     EMpegMovieMode  StatusMovie();
  158.     BOOL            IsTimeFormatSupported(GUID Format);
  159.     BOOL            IsTimeSupported();
  160.     BOOL            SetTimeFormat(GUID Format);
  161.     GUID            GetTimeFormat();
  162.     void            SetFocus();
  163.     BOOL            ConfigDialog(HWND hwnd);
  164.     BOOL            RepaintVideo(HWND hwnd, HDC hdc);
  165.     BOOL            SetAppText(char* sz);
  166.  
  167.     LPDIRECTDRAWSURFACE7 GetAppImage() {
  168.         return m_lpDDAppImage;
  169.     }
  170.  
  171.  
  172.     IMpegAudioDecoder   *pMpegAudioDecoder;
  173.     IQualProp           *pVideoRenderer;
  174. };
  175.  
  176.